﻿using System;
using System.ComponentModel;
using System.Resources;

namespace Kyoh.Lib.Component.Globalization
{
    /// <summary>デザイナなどに表示する説明文をリソースから取得します。</summary>
    [AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
    public sealed class DescriptionFromResourceAttribute : DescriptionAttribute
    {
        private ResourceManager resource;

        /// <summary><see cref="DescriptionFromResourceAttribute"/> の新しいインスタンスを作成します。</summary>
        /// <param name="resourceSource">説明文を取得するリソースの型。</param>
        /// <param name="description">リソースから説明文を取得する際に使用する名前。</param>
        public DescriptionFromResourceAttribute(Type resourceSource, string description)
            : base(description)
        {
            this.resource = new ResourceManager(resourceSource);
        }

        /// <summary>説明文を取得します。</summary>
        public override string Description
        {
            get
            {
                try { return this.resource.GetString(base.Description); }
                catch { return base.Description; }
            }
        }

        private Guid instanceGuid = Guid.NewGuid();
        /// <summary>この <see cref="Attribute"/> の一意の識別子を取得します。</summary>
        public override object TypeId { get { return instanceGuid; } }
    }
}
